package principal;

import java.awt.Color;
import java.util.List;

import netgames.JogadaTetris;

public class Tabuleiro extends MatrizDeQuadrados {

	private static final long serialVersionUID = 1L;
	protected boolean hasVencedor;

	public Tabuleiro(int altura, int largura) {
		super(altura, largura);
	}

	public void posicionarTetramino(JogadaTetris jogadaTetris) {
		Tetramino tetram = jogadaTetris.getTetramino();
		tetram.setMatriz(this);
		for (Quadrado q : tetram.getQuadrados()) {
			getQuadrado((int) q.getReferencia().getX(), (int) q.getReferencia().getY()).setOcupado(true);
			getQuadrado((int) q.getReferencia().getX(), (int) q.getReferencia().getY()).defineCor(tetram.getColor(tetram.getJogador().getCor()));
			getQuadrado((int) q.getReferencia().getX(), (int) q.getReferencia().getY()).setJogador(tetram.getJogador());
		}
		getQuadrado((int) tetram.getQuadradoReferencia().getReferencia().getX(), (int) tetram.getQuadradoReferencia().getReferencia().getY()).setOcupado(true);
		getQuadrado((int) tetram.getQuadradoReferencia().getReferencia().getX(), (int) tetram.getQuadradoReferencia().getReferencia().getY()).defineCor(tetram.getColor(tetram.getJogador().getCor()));
		getQuadrado((int) tetram.getQuadradoReferencia().getReferencia().getX(), (int) tetram.getQuadradoReferencia().getReferencia().getY()).setJogador(tetram.getJogador());
		
	}

	public void removerLinha(int linha) {
		
		for (int i = linha; i >= 0; i--) {
			for (int j = 0; j < largura; j++) {
				if(!(i ==0)){
					getQuadrado(i, j).setOcupado(getQuadrado(i-1, j).getOcupado());
					getQuadrado(i-1, j).setOcupado(false);
					if(getQuadrado(i-1, j).getJogador() != null){
						getQuadrado(i, j).setJogador(getQuadrado(i-1, j).getJogador());
						getQuadrado(i-1, j).setJogador(null);
					}
					getQuadrado(i, j).defineCor(getQuadrado(i-1, j).getBackground());
					getQuadrado(i-1, j).defineCor(Color.WHITE);
					
					
					getQuadrado(i-1, j).repaint();
					getQuadrado(i-1, j).validate();
					
					getQuadrado(i, j).repaint();
					getQuadrado(i, j).validate();
				}else{
					setQuadrado(i, j, new Quadrado(i, j));
					getQuadrado(i, j).repaint();
					getQuadrado(i, j).validate();
				}
			}
		}
		
	}


	public boolean hasVencedor() {
		
		return hasVencedor;
	}
	
	
	public Jogador verificaQuemEhVencedor(int coluna, Jogador jog1, Jogador jog2){
 		int ptsJogador1 = 0;
		int ptsJogador2 = 0;
		
		
		for (int i = 0; i < altura; i++) {
			if(getQuadrado(i, coluna).getJogador() != null && jog1.getNome().equals(getQuadrado(i, coluna).getJogador().getNome())){
				ptsJogador1++;
			}else if(getQuadrado(i, coluna).getJogador()!= null && jog2.getNome().equals(getQuadrado(i, coluna).getJogador().getNome())){
				ptsJogador2++;
			}
		}
		
		if(ptsJogador1 > ptsJogador2){
			return jog2;
		}else if(ptsJogador1 < ptsJogador2){
			return jog1;
		}
		return null;
	}

	public boolean verificaSePosicaoEhValida(Quadrado quadrado, Tetramino tetramino, int orientacao) {
		boolean isValida = true;
		List<Quadrado> lista = tetramino.gerarReferencias(quadrado, orientacao);
		if(lista.size() == 3){
			for(Quadrado quad : lista){
				if(quad.getOcupado()){
					isValida = !quad.getOcupado();
					for(Quadrado quad2 : tetramino.getQuadrados()){
						if(quad.getReferencia().getX() == quad2.getReferencia().getX() && 
								quad.getReferencia().getY() == quad2.getReferencia().getY()){
							isValida = quad.getOcupado();
						}
					}
					if(quad.getOcupado() && !isValida){
						break;
					}
				}
			}
		} else{
			isValida = false;
		}
		
		if(isValida){
			tetramino.apagarAntigos();
		}
		return isValida;
	}
	
	
}